﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ABDLight
{
    class Translit
    {
        static readonly string[,] TblTraslitFromCommon = {
        {"SHCH","Щ"} ,                                                     
		{"TSKY ", "ЦКИЙ "},
        {"AYO","АЙО"},
		{"KII ", "КИЙ "},
		{"KIJ ", "КИЙ "},
		{"CKY ", "ЦКИЙ "},
        {"TIV","ТЫВ"},
        {"CHU","ЧУ"},
        {"CHE","ЧЕ"},
        {"AIA","АЯ"},
		{"SKY ", "СКИЙ "},
		{"SHCH", "Щ"},
		{"SHH", "Щ"},
		{"IQ", "АЙКЬЮ"},
		{"QU", "КУ"},
		{"TU", "ТЮ"},
		{"IA", "Я"}, //yt gfitn
		{"NY", "НИ"},
		{"YI", "Я"},
		{"YA", "Я"},
		{"YE", "Е"},
		{"YO", "Е"},
		{"YU", "Ю"},
		{"AY", "АЙ"},
		{"EY", "ЕЙ"},
		{"IY", "ИЙ"},
		{"OY", "ОЙ"},
		{"UY", "УЙ"},
		{"YY", "ЫЙ"},
		{"CH", "Ч"},
		{"SH", "Ш"},
		{"KH", "Х"},
		{"ZH", "Ж"},
		{"TS", "Ц"},
		{"TZ", "Ц"},
		{"IC", "ИК"},
        {"A", "А"},
		{"B", "Б"},
		{"V", "В"},
		{"G", "Г"},
		{"D", "Д"},
		{"E", "Е"},
		{"Z", "З"},
		{"I", "И"},
		{"J", "Ж"},
		{"K", "К"},
		{"Q", "К"},
		{"L", "Л"},
		{"M", "М"},
		{"N", "Н"},
		{"O", "О"},
		{"P", "П"},
		{"R", "Р"},
		{"S", "С"},
		{"T", "Т"},
		{"U", "У"},
		{"F", "Ф"},
		{"H", "Х"},
		{"C", "Ц"},
		{"'", "Ь"},
		{"Y", "Ы"},
		{"W", "В"},
		{"X", "КС"} 
	};

        static readonly string[,] TblTraslitToLatinGOST = 
        {
            {"Є", "EH"},
            {"І", "I"},
            {"і", "i"},
            {"№", "#"},
            {"є", "eh"},
            {"А", "A"},
            {"Б", "B"},
            {"В", "V"},
            {"Г", "G"},
            {"Д", "D"},
            {"Е", "E"},
            {"Ё", "JO"},
            {"Ж", "ZH"},
            {"З", "Z"},
            {"И", "I"},
            {"Й", "JJ"},
            {"К", "K"},
            {"Л", "L"},
            {"М", "M"},
            {"Н", "N"},
            {"О", "O"},
            {"П", "P"},
            {"Р", "R"},
            {"С", "S"},
            {"Т", "T"},
            {"У", "U"},
            {"Ф", "F"},
            {"Х", "KH"},
            {"Ц", "C"},
            {"Ч", "CH"},
            {"Ш", "SH"},
            {"Щ", "SHH"},
            {"Ъ", "'"},
            {"Ы", "Y"},
            {"Ь", ""},
            {"Э", "EH"},
            {"Ю", "YU"},
            {"Я", "YA"},
            {"а", "a"},
            {"б", "b"},
            {"в", "v"},
            {"г", "g"},
            {"д", "d"},
            {"е", "e"},
            {"ё", "jo"},
            {"ж", "zh"},
            {"з", "z"},
            {"и", "i"},
            {"й", "jj"},
            {"к", "k"},
            {"л", "l"},
            {"м", "m"},
            {"н", "n"},
            {"о", "o"},
            {"п", "p"},
            {"р", "r"},
            {"с", "s"},
            {"т", "t"},
            {"у", "u"},

            {"ф", "f"},
            {"х", "kh"},
            {"ц", "c"},
            {"ч", "ch"},
            {"ш", "sh"},
            {"щ", "shh"},
            {"ъ", ""},
            {"ы", "y"},
            {"ь", ""},
            {"э", "eh"},
            {"ю", "yu"},
            {"я", "ya"},
            {"«", ""},
            {"»", ""},
            {"—", "-"}
        };
        //-------------------------------------------------
        static readonly string[,] TblTraslitToLatinISO = 
        {          
           {"Є", "YE"},
           {"І", "I"},
           {"Ѓ", "G"},
           {"і", "i"},
           {"№", "#"},
           {"є", "ye"},
           {"ѓ", "g"},
           {"А", "A"},
           {"Б", "B"},
           {"В", "V"},
           {"Г", "G"},
           {"Д", "D"},
           {"Е", "E"},
           {"Ё", "YO"},
           {"Ж", "ZH"},
           {"З", "Z"},
           {"И", "I"},
           {"Й", "J"},
           {"К", "K"},
           {"Л", "L"},
           {"М", "M"},
           {"Н", "N"},
           {"О", "O"},
           {"П", "P"},
           {"Р", "R"},
           {"С", "S"},
           {"Т", "T"},
           {"У", "U"},
           {"Ф", "F"},
           {"Х", "X"},
           {"Ц", "C"},
           {"Ч", "CH"},
           {"Ш", "SH"},
           {"Щ", "SHH"},
           {"Ъ", "'"},
           {"Ы", "Y"},
           {"Ь", ""},
           {"Э", "E"},
           {"Ю", "YU"},
           {"Я", "YA"},
           {"а", "a"},
           {"б", "b"},
           {"в", "v"},
           {"г", "g"},
           {"д", "d"},
           {"е", "e"},
           {"ё", "yo"},
           {"ж", "zh"},
           {"з", "z"},
           {"и", "i"},
           {"й", "j"},
           {"к", "k"},
           {"л", "l"},
           {"м", "m"},
           {"н", "n"},
           {"о", "o"},
           {"п", "p"},
           {"р", "r"},
           {"с", "s"},
           {"т", "t"},
           {"у", "u"},
           {"ф", "f"},
           {"х", "x"},
           {"ц", "c"},
           {"ч", "ch"},
           {"ш", "sh"},
           {"щ", "shh"},
           {"ъ", ""},
           {"ы", "y"},
           {"ь", ""},
           {"э", "e"},
           {"ю", "yu"},
           {"я", "ya"},
           {"«", ""},
           {"»", ""},
           {"—", "-"}
        };



        public static string TranslitToLatin(string addr, int TypeChar)
        {

            if (addr.Length == 0) return addr;
            string str = addr;
            int len = str.Length;
            str = " " + str.ToUpper().Trim() + " ";

            if (TypeChar == 1)
            {
                int ubound = TblTraslitToLatinISO.GetUpperBound(0);
                for (int i = 0; i <= ubound; i++)
                {

                    str = str.Replace(TblTraslitToLatinISO[i, 0], TblTraslitToLatinISO[i, 1]);
                }
            }
            if (TypeChar == 2)
            {
                int ubound = TblTraslitToLatinGOST.GetUpperBound(0);
                for (int i = 0; i <= ubound; i++)
                {

                    str = str.Replace(TblTraslitToLatinGOST[i, 0], TblTraslitToLatinGOST[i, 1]);
                }
            }
            return str;


        }

        public static string TranslitFromLatin(string addr)
        {
            if (addr.Length == 0) return addr;
            string str = addr;
            int len = str.Length;
            str = " " + str.ToUpper().Trim() + " ";


            int ubound = TblTraslitFromCommon.GetUpperBound(0);
            for (int i = 0; i <= ubound; i++)
            {

                str = str.Replace(TblTraslitFromCommon[i, 0], TblTraslitFromCommon[i, 1]);
            }
            return str;


        }









    }
}
